SQlite源码分析

名词及相关概念

内存泄漏:简单地说,内存泄漏是指申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。

双向链表:链表我们大家都很熟悉,在数据结构课程中学习过很多种链表,该内存分配器使用的是双向链表。双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。

Chunk与block:在mem3.c中,引入了chunk和block的概念。它们之间有什么关系呢?一个chunk由两个或两个以上的block构成,一个block包含8byte。它们的关系可以通过下面的图来表示。

图3.2.1 一个chunk块结构

上图中可以看到,一个chunk由两个以上的block组成,一个block有8个字节,chunk中的某些block有特殊含义,用图表示如下(图中假设u表示chunk的实例)。 图3.2.2 Chunk中第一个block结构

图3.2.3 chunk中第二个block结构

上面的图3.2.1-3,可以看到该内存分配器中chunk和block的关系。那么,形成chunk链表保存到哪呢?这与用户申请空间的大小有关。